package controllers;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.TreeSet;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import model.OPDept;
import model.Order;
import model.OrderedProduct;
import model.Product;
import model.Warehouse;
import view.AdminView;
public class AdminController {
private AdminView aw;
private Warehouse warehouse;
private OPDept opdept;
private SerializationController sc;
public AdminController(AdminView aw, SerializationController sc) {
this.aw = aw;
this.sc = sc;
this.warehouse = sc.deserializeWarehouse();
this.opdept = sc.deserializeOrders();
this.aw.viewOrdersListener(new ViewOrdersListener());
this.aw.viewChangeListener(new ViewChangeListener());
this.aw.addTableActionListener(new TableActionListener());
this.aw.addAddButtonListener(new AddButtonActionListener());
this.aw.addRemoveButtonListener(new RemoveButtonActionListener());
this.aw.getPanelAdd().setVisible(true);
this.aw.getPanelView().setVisible(true);
this.aw.getPanelOrders().setVisible(false);
this.aw.getViewAndChange().setSelected(true);
}
class RemoveButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (aw.getTable().getSelectedRow() != -1) {
int idToBeRemoved = (int) (aw.getModel().getValueAt(aw.getTable().getSelectedRow(), 0));
warehouse.removeProduct(idToBeRemoved);
sc.serializeWarehouse(warehouse);
aw.getModel().removeRow(aw.getTable().getSelectedRow());
warehouse = sc.deserializeWarehouse();
}
}
}
class AddButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Product p = new Product(Integer.parseInt(aw.getId()), aw.getBook(), aw.getAuthor(), aw.getPublisher(),
Double.parseDouble(aw.getPrice()), Integer.parseInt(aw.getQuantity()));
p.printProduct();
warehouse.addProduct(p);
sc.serializeWarehouse(warehouse);
aw.getModel().setRowCount(0);
warehouse = sc.deserializeWarehouse();
TreeSet<Product> products = warehouse.getProducts();
aw.paintTable(products);
}
}
class ViewOrdersListener implements MenuListener {
@Override
public void menuCanceled(MenuEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void menuDeselected(MenuEvent arg0) {
// TODO Auto-generated method stub
aw.getViewAndChange().setSelected(false);
aw.getPanelOrders().setVisible(true);
aw.getPanelAdd().setVisible(false);
aw.getPanelView().setVisible(false);
opdept = sc.deserializeOrders();
Iterator<Order> itr = opdept.getOrders().iterator();
while (itr.hasNext()) {
Order o = itr.next();
aw.getListData().addElement(o.getId());
aw.getListData().addElement("Status: " + o.getStatus() );
aw.getListData().addElement("Total value: " + o.getValue());
Iterator<OrderedProduct> itrop = o.getOrderedProducts().iterator();
while (itrop.hasNext()) {
OrderedProduct op = itrop.next();
aw.getListData().addElement(op.getProduct().getTitle() + "-> Ordered quantity: " + op.getOrderedQuantity());
}
aw.getListData().addElement(" ");
aw.getOrderList().setListData(aw.getListData());
}
}
@Override
public void menuSelected(MenuEvent arg0) {
aw.getViewAndChange().setSelected(false);
aw.getPanelOrders().setVisible(true);
aw.getPanelAdd().setVisible(false);
aw.getPanelView().setVisible(false);
opdept = sc.deserializeOrders();
Iterator<Order> itr = opdept.getOrders().iterator();
while (itr.hasNext()) {
Order o = itr.next();
aw.getListData().addElement(o.getId());
aw.getListData().addElement("Status: " + o.getStatus() );
aw.getListData().addElement("Total value: " + o.getValue());
Iterator<OrderedProduct> itrop = o.getOrderedProducts().iterator();
while (itrop.hasNext()) {
OrderedProduct op = itrop.next();
aw.getListData().addElement(op.getProduct().getTitle() + "-> Ordered quantity: " + op.getOrderedQuantity());
}
aw.getListData().addElement(" ");
aw.getOrderList().setListData(aw.getListData());
}
}
}
class ViewChangeListener implements MenuListener {
@Override
public void menuCanceled(MenuEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void menuDeselected(MenuEvent arg0) {
aw.getPanelAdd().setVisible(true);
aw.getPanelView().setVisible(true);
aw.getPanelOrders().setVisible(false);
aw.getModel().setRowCount(0);
warehouse = sc.deserializeWarehouse();
TreeSet<Product> products = warehouse.getProducts();
aw.paintTable(products);
sc.serializeWarehouse(warehouse);
}
@Override
public void menuSelected(MenuEvent arg0) {
aw.getPanelAdd().setVisible(true);
aw.getPanelView().setVisible(true);
aw.getPanelOrders().setVisible(false);
aw.getModel().setRowCount(0);
warehouse = sc.deserializeWarehouse();
TreeSet<Product> products = warehouse.getProducts();
aw.paintTable(products);
sc.serializeWarehouse(warehouse);
}
}
class TableActionListener implements TableModelListener {
@Override
public void tableChanged(TableModelEvent tme) {
if (tme.getColumn() != -1) {
// we have an update, not a row insert
warehouse.modifyProduct(tme.getFirstRow() + 1, tme.getColumn(),
aw.getModel().getValueAt(tme.getFirstRow(), tme.getColumn()).toString());
sc.serializeWarehouse(warehouse);
}
}
}
}